home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cpp_libs / linklist / source.lha / example.c < prev    next >
C/C++ Source or Header  |  1993-08-08  |  3KB  |  148 lines

  1. #include        <stdio.h>
  2. #include        "list.h"
  3.  
  4. typedef struct rapport {
  5.     char        title[30];
  6.     char        author[15];
  7.     int        date;
  8. } Rapport;
  9. int    rapSz = sizeof(Rapport);
  10.  
  11. static void    insRap(), prRapAll(), prRap();
  12. static int        search(), compare();
  13.  
  14. main()
  15. {
  16.     int            id, code, search_date;
  17.     Rapport        rap;
  18.  
  19.     id = lDef(lSINGLY, lCHAIN);
  20.  
  21.     insRap(id, lFIRST, 1, "Book 1", "People", 890129);
  22.     insRap(id, lFIRST, 2, "Book 2", "More People", 890130);
  23.     insRap(id, lLAST, 1, "Book 3", "Lots of People", 890131);
  24.  
  25.     fprintf(stdout, "lGetNode\n");
  26.     prRapAll(id);
  27.  
  28.     fprintf(stdout, "lGetIndxNode\n");
  29.     code = lGetIndxNode(id, 4, &rap, rapSz);
  30.     prRap(code, &rap);
  31.     code = lGetIndxNode(id, 2, &rap, rapSz);
  32.     prRap(code, &rap);
  33.     code = lGetIndxNode(id, -1, &rap, rapSz);
  34.     prRap(code, &rap);
  35.     code = lGetIndxNode(id, 3, &rap, rapSz);
  36.     prRap(code, &rap);
  37.  
  38.     fprintf(stdout, "lFndNode\n");
  39.     search_date = 890129;
  40.     code = lFndNode(id, lFIRST, search, &search_date, &rap, rapSz);
  41.     prRap(code, &rap);
  42.     code = lFndNode(id, lNEXT, search, &search_date, &rap, rapSz);
  43.     prRap(code, &rap);
  44.     code = lFndNode(id, lNEXT, search, &search_date, &rap, rapSz);
  45.     prRap(code, &rap);
  46.  
  47.     code = lDump(id, "dump");
  48.     fprintf(stdout, "lDump : %d\n", code);
  49.  
  50.     lDel(id);
  51.  
  52.     id = lUndump("dump");
  53.     fprintf(stdout, "lUndump : %d\n", id);
  54.  
  55.     insRap(id, lFIRST, 4, "Book 4", "The Author", 891127);
  56.  
  57.     prRapAll(id);
  58.  
  59.     fprintf(stdout, "lFndFlagNode\n");
  60.     code = lFndFlagNode(id, lFIRST, 1, &rap, rapSz);
  61.     prRap(code, &rap);
  62.     code = lFndFlagNode(id, lNEXT, 1, &rap, rapSz);
  63.     prRap(code, &rap);
  64.     code = lFndFlagNode(id, lFIRST, 2, &rap, rapSz);
  65.     prRap(code, &rap);
  66.     code = lFndFlagNode(id, lFIRST, 7, &rap, rapSz);
  67.     prRap(code, &rap);
  68.     
  69.     fprintf(stdout, "Untouched list\n");
  70.     prRapAll(id);
  71.  
  72.     fprintf(stdout, "lSort\n");
  73.     lSort(id, lDESCENDING, lBUBBLE, compare);
  74.     prRapAll(id);
  75.  
  76.     fprintf(stdout, "lSort\n");
  77.     lSort(id, lASCENDING, lHEAP, compare);
  78.     prRapAll(id);
  79.  
  80.     lDelAll();
  81. }
  82.  
  83. static void
  84. insRap(id, where, flag, title, author, date)
  85. int    id, where, flag, date;
  86. char    *title, *author;
  87. {
  88.     int        code;
  89.     Rapport    rap;
  90.  
  91.     strcpy(rap.title, title);
  92.     strcpy(rap.author, author);
  93.     rap.date = date;
  94.     code = lInsNode(id, where, &rap, rapSz, flag);
  95. }
  96.  
  97. static void
  98. prRapAll(id)
  99. int    id;
  100. {
  101.     int        code;
  102.     Rapport    rap;
  103.  
  104.     code = lGetNode(id, lFIRST, &rap, rapSz);
  105.     prRap(code, &rap);
  106.     while (code == lFIRST || code == lSUCCESS || code == lLAST) {
  107.         code = lGetNode(id, lNEXT, &rap, rapSz);
  108.         prRap(code, &rap);
  109.     }
  110. }
  111.  
  112. static void
  113. prRap(code, rpprt)
  114. int            code;
  115. Rapport        *rpprt;
  116. {
  117.     if (code >= 0)
  118.         fprintf(stdout, "Rapport : '%s' '%s' '%d'\n", rpprt->title,
  119.             rpprt->author, rpprt->date);
  120.     else
  121.         fprintf(stdout, "Return code = %d\n", code);
  122. }
  123.  
  124. static int
  125. search(date, rpprt)
  126. int            *date;
  127. Rapport        *rpprt;
  128. {
  129.     if (rpprt->date > *date)
  130.         return(lFOUND);
  131.     else
  132.         return(lNOT_FOUND);
  133. }
  134.  
  135. static int 
  136. compare(data1, data2)
  137. Rapport *data1, *data2;
  138. {
  139.     int    k = strcmp(data1->author, data2->author);
  140.  
  141.     if (k == 0)
  142.         return(lSAME);    /* key1 == key2 */
  143.     else if (k > 0)
  144.         return(l2LT1);    /* key1 > key2 */
  145.     else if (k < 0)
  146.         return(l1LT2);    /* key1 < key2 */
  147. }
  148.